package com.iceframework.core.utils;

import java.util.ArrayList;
import java.util.List;

import com.iceframework.core.entity.TreeEntity;

/**
 * 
 * 解析树形数据工具类
 * 
 * @author Palo
 *
 */
public class TreeParserUtils {
	/**
	 * 解析树形数据
	 * 
	 * @param topId
	 * @param entityList
	 * @return
	 */
	public static <E extends TreeEntity<E>> List<E> getTreeList(String topId, List<E> entityList) {
		//判断参数列表是否为空
		if(topId == null || entityList == null) {
			return null;
		}
		
		List<E> resultList = new ArrayList<>();

		// 获取顶层元素集合
		String parentId;
		for (E entity : entityList) {
			parentId = entity.getParentId();
			if (parentId == null || topId.equals(parentId)) {
				resultList.add(entity);
			}
		}

		// 获取每个顶层元素的子数据集合
		for (E entity : resultList) {
			entity.setChildren(getSubList(entity.getId(), entityList));
		}

		return resultList;
	}

	/**
	 * 获取子数据集合
	 * 
	 * @param id
	 * @param entityList
	 * @return
	 */
	private static <E extends TreeEntity<E>> List<E> getSubList(String id, List<E> entityList) {
		List<E> childList = new ArrayList<>();
		String parentId;

		// 子集的直接子对象
		for (E entity : entityList) {
			parentId = entity.getParentId();
			if (id.equals(parentId)) {
				childList.add(entity);
			}
		}

		// 子集的间接子对象
		for (E entity : childList) {
			entity.setChildren(getSubList(entity.getId(), entityList));
		}

		// 递归退出条件
		if (childList.size() == 0) {
			return null;
		}

		return childList;
	}
}